/**
 * 好友相关API接口
 */

import request from '../utils/request.js'

export const friendApi = {
  /**
   * 获取好友列表
   * @param {Object} params - 查询参数
   * @param {string} params.keyword - 搜索关键词
   * @param {string} params.group - 好友分组
   */
  getFriendList(params = {}) {
    // 获取当前登录用户ID
    const userInfo = uni.getStorageSync('userInfo')
    const userId = userInfo?.id || userInfo?.userId

    if (!userId) {
      console.error('未找到用户信息，请重新登录')
      throw new Error('用户未登录')
    }

    return request.get('/user/friends', {
      ...params,
      userId: userId
    })
  },

  /**
   * 搜索用户/好友
   * @param {string} keyword - 搜索关键词（用户名/昵称/邮箱/手机号）
   * @param {Object} params - 其他查询参数
   */
  searchUsers(keyword) {
    // 获取当前登录用户ID
    const userInfo = uni.getStorageSync('userInfo')
    const currentUserId = userInfo?.id || userInfo?.userId

    if (!currentUserId) {
      console.error('未找到用户信息，请重新登录')
      throw new Error('用户未登录')
    }

    return request.get('/user/friends/search', {
      keyword: keyword,
      currentUserId: currentUserId
    })
  },

  /**
   * 发送好友申请
   * @param {Object} data - 申请数据
   * @param {string} data.fromUserId - 发送方用户ID
   * @param {string} data.toUserId - 接收方用户ID
   * @param {string} data.message - 申请消息
   * @param {string} data.source - 来源（search/scan/nearby等）
   */
  sendFriendRequest(data) {
    return request.post('/user/friends/request', data)
  },

  /**
   * 获取好友申请列表
   * @param {Object} params - 查询参数
   * @param {string} params.type - 申请类型（sent/received）
   * @param {string} params.status - 申请状态（pending/accepted/rejected）
   */
  getFriendRequests(params = {}) {
    // 获取当前登录用户ID
    const userInfo = uni.getStorageSync('userInfo')
    const userId = userInfo?.id || userInfo?.userId

    if (!userId) {
      console.error('未找到用户信息，请重新登录')
      throw new Error('用户未登录')
    }

    return request.get('/user/friends/requests', {
      ...params,
      userId: userId
    })
  },

  /**
   * 获取好友申请未读数量
   */
  getFriendRequestCount() {
    // 获取当前登录用户ID
    const userInfo = uni.getStorageSync('userInfo')
    const userId = userInfo?.id || userInfo?.userId

    if (!userId) {
      console.error('未找到用户信息，请重新登录')
      throw new Error('用户未登录')
    }

    return request.get('/user/friends/requests/count', {
      userId: userId
    })
  },

  /**
   * 处理好友申请
   * @param {string} friendId - 好友关系ID
   * @param {string} action - 操作（accept/reject）
   * @param {string} message - 回复消息（可选）
   */
  handleFriendRequest(friendId, action, message) {
    return request.put('/user/friends/requests', {
      friendId: friendId, // 好友关系ID
      action: action
    })
  },

  /**
   * 批量处理好友申请
   * @param {Array} requestIds - 申请ID列表
   * @param {string} action - 操作（accept/reject）
   */
  batchHandleFriendRequests(requestIds, action) {
    return request.put('/user/friends/requests/batch', {
      requestIds,
      action: action
    })
  },

  /**
   * 删除好友
   * @param {string} friendId - 好友ID
   * @param {boolean} deleteMessages - 是否删除聊天记录
   */
  deleteFriend(friendId, deleteMessages = false) {
    // 获取当前登录用户ID
    const userInfo = uni.getStorageSync('userInfo')
    const currentUserId = userInfo?.id || userInfo?.userId

    if (!currentUserId) {
      console.error('未找到用户信息，请重新登录')
      throw new Error('用户未登录')
    }

    return request.delete(`/user/friends/${friendId}`, {
      params: {
        currentUserId: currentUserId,
        deleteMessages: deleteMessages
      }
    })
  },

  /**
   * 获取好友详细信息
   * @param {string} friendId - 好友ID
   */
  getFriendDetail(friendId) {
    return request.get(`/user/friends/${friendId}`)
  },

  /**
   * 设置好友备注
   * @param {string} friendId - 好友ID
   * @param {string} remark - 备注名称
   */
  setFriendRemark(friendId, remark) {
    return request.put(`/user/friends/${friendId}/remark`, { remark })
  },

  /**
   * 拉黑好友
   * @param {string} friendId - 好友ID
   * @param {string} reason - 拉黑原因
   */
  blockFriend(friendId, reason) {
    return request.put(`/user/friends/${friendId}/block`, { reason })
  },

  /**
   * 取消拉黑
   * @param {string} friendId - 好友ID
   */
  unblockFriend(friendId) {
    return request.put(`/user/friends/${friendId}/unblock`)
  },

  /**
   * 获取黑名单列表
   */
  getBlockList() {
    return request.get('/user/friends/blocked')
  },

  /**
   * 创建好友分组
   * @param {Object} data - 分组数据
   * @param {string} data.name - 分组名称
   * @param {string} data.description - 分组描述
   */
  createFriendGroup(data) {
    return request.post('/user/friends/groups', data)
  },

  /**
   * 获取好友分组列表
   */
  getFriendGroups() {
    return request.get('/user/friends/groups')
  },

  /**
   * 更新好友分组
   * @param {string} groupId - 分组ID
   * @param {Object} data - 更新数据
   */
  updateFriendGroup(groupId, data) {
    return request.put(`/user/friends/groups/${groupId}`, data)
  },

  /**
   * 删除好友分组
   * @param {string} groupId - 分组ID
   */
  deleteFriendGroup(groupId) {
    return request.delete(`/user/friends/groups/${groupId}`)
  },

  /**
   * 移动好友到分组
   * @param {string} friendId - 好友ID
   * @param {string} groupId - 目标分组ID
   */
  moveFriendToGroup(friendId, groupId) {
    return request.put(`/user/friends/${friendId}/group`, { groupId })
  },

  /**
   * 批量移动好友到分组
   * @param {Array} friendIds - 好友ID数组
   * @param {string} groupId - 目标分组ID
   */
  moveFriendsToGroup(friendIds, groupId) {
    return request.put('/user/friends/batch-move', { friendIds, groupId })
  },

  /**
   * 获取共同好友
   * @param {string} userId - 用户ID
   */
  getMutualFriends(userId) {
    return request.get(`/user/friends/mutual/${userId}`)
  },

  /**
   * 推荐好友
   * @param {Object} params - 查询参数
   * @param {number} params.limit - 推荐数量
   */
  // getRecommendedFriends(params = {}) {
  //   return request.get('/user/friends/recommended', params)
  // }
}

export default friendApi